package com.zrk.core;

import java.lang.reflect.Modifier;
import java.util.Arrays;

public class ReflectLearn {
    public static void main(String[] args) throws Exception {
        Class stdClass = Student.class;
        // 1.根据字段名获取某个public的field（包括父类）
        System.out.println(stdClass.getField("score") + " 1");
        System.out.println("getName:" + stdClass.getField("score").getName());
        System.out.println("getType:" + stdClass.getField("name").getType());

        // Modifiers返回值是一个按位或的整型
        int modifiers = stdClass.getField("name").getModifiers();
        System.out.println("getModifiers:" + modifiers);
        System.out.println("isFinal?" + Modifier.isFinal(modifiers));
        System.out.println("isPublic?" + Modifier.isPublic(modifiers));
        // 2.根据字段名获取当前类的某个field（不包括父类）
        System.out.println(stdClass.getDeclaredField("grade") + " 2");
        // 3.获取所有public的field（包括父类）
        System.out.println(Arrays.toString(stdClass.getFields()) + " 3");
        // 4.获取当前类的所有field（不包括父类）
        System.out.println(Arrays.toString(stdClass.getDeclaredFields()) + " 4");
    }
}

class Student extends Preson {
    public int score;
    private int grade;
}

class Preson {
    public String name;
}

/**
 * 以下为打印内容
 * public int com.zrk.core.Student.score 1
 * getName:score
 * getType:class java.lang.String
 * getModifiers:1
 * isFinal?false
 * isPublic?true
 * private int com.zrk.core.Student.grade 2
 * [public int com.zrk.core.Student.score, public java.lang.String com.zrk.core.Preson.name] 3
 * [public int com.zrk.core.Student.score, private int com.zrk.core.Student.grade] 4
 */